package com.scse.bms.service;

import com.scse.bms.domain.UserCaseVO;
import com.scse.bms.domain.UserVO;
import com.scse.bms.entity.UserDO;
import com.scse.bms.exception.UserException;

import java.util.List;

/**
 * @Title: UserService
 * @Author: 吴赠禹
 * @Date: 2020/11/3 0003
 * @Version: 1.0
 * @Description: 用户Service接口
 */
public interface UserService {

    /**
     * 添加用户
     *
     * @param user
     * @return
     */
    int addUser(UserDO user);

    /**
     * 根据用户账号和密码查找用户
     *
     * @param account
     * @param pass
     * @return
     */
    UserVO findUserToLogin(String account, String pass);

    /**
     * 查询所有用户信息
     */
    List<UserVO> selectAllUser(int page, int limit);

    /**
     * 获取用户记录数
     */
    int selectAllUserCount();

    /**
     * 获取符合条件的用户总数
     */
    int statAllUserByCase(UserCaseVO user);

    /**
     * 查询符合条件的所有用户
     */
    List<UserVO> selectAllUserByCase(UserCaseVO user, int page, int limit);

    /**
     * 判断用户名是否存在（通过返回的ID判断是否存在）
     * @param username
     * @return
     */
    Integer selectUserNameIfExistById(String username);

    /**
     * 修改用户名
     * @param userDO
     * @return
     */
    int updateUserName(UserDO userDO);


    /**
     * 判断邮箱是否存在
     * byId的意思是主键唯一，根据返回的主键来判断
     * @param email
     * @return
     */
    Integer selectEmailIfExistById(String email);

    /**
     * 修改邮箱
     * @param userDO
     * @return
     */
    int updateEmail(UserDO userDO);


    /**
     * 查询密码是否正确
     * @param userDO
     * @return
     */
    Integer selectPasswordIfCorrect(UserDO userDO);


    /**
     * 修改用户密码
     * @param userDO
     * @return
     */
    int updatePassword(UserDO userDO);


    /**
     * 根据用户ID查询用户所有信息（个人中心使用，只有部分字段）
     */
    UserVO selectUserById(Integer id);


    /**
     * 获取用户全信息，用于session
     * @param id
     * @return
     */
    UserVO getUserFullInfoById(Integer id);





}
